/**
 * Date: 2018-10-14
 * Author: 刘伶俐
 * Desc: 将xml字符串转换成dom结构
 */

export default function parseStringToXml(xmlString) {

  if (!((typeof xmlString === 'string') && xmlString.constructor === String)) {
    return xmlString
  }
  // 特殊处理
  // 提取vitalheader中的innerHtml
  // 提取vitalfooter中的innerHtml
  const vitalheader = getAttribute(xmlString, 'vitalheader', 'innerHtml');
  xmlString = vitalheader.htmlStr;
  
  const headerHtml = vitalheader.innerHtml;
  const vitalfooter = getAttribute(xmlString, 'vitalfooter', 'innerHtml');
  xmlString = vitalfooter.htmlStr;
  const footerHtml = vitalfooter.innerHtml;
  
  let xmlDoc = null;
  //判断浏览器的类型
  //支持IE浏览器
  if (!window.DOMParser && window.ActiveXObject) {   //window.DOMParser 判断是否是非ie浏览器
    let xmlDomVersions = ['MSXML.2.DOMDocument.6.0', 'MSXML.2.DOMDocument.3.0', 'Microsoft.XMLDOM'];
    for (let i = 0; i < xmlDomVersions.length; i++) {
      try {
        xmlDoc = new window.ActiveXObject(xmlDomVersions[i]);
        xmlDoc.async = false;
        xmlDoc.loadXML(xmlString); //loadXML方法载入xml字符串
        break;
      } catch (e) {
      }
    }
  }
  //支持Mozilla浏览器
  else if (window.DOMParser && document.implementation && document.implementation.createDocument) {
    try {
      /* DOMParser 对象解析 XML 文本并返回一个 XML Document 对象。
       * 要使用 DOMParser，使用不带参数的构造函数来实例化它，然后调用其 parseFromString() 方法
       * parseFromString(text, contentType) 参数text:要解析的 XML 标记 参数contentType文本的内容类型
       * 可能是 "text/xml" 、"application/xml" 或 "application/xhtml+xml" 中的一个。注意，不支持 "text/html"。
       */
      window.domParser = new window.DOMParser();
      xmlDoc = window.domParser.parseFromString(xmlString, 'text/xml');
    } catch (e) {
    }
  }
  else {
    return null;
  }
  
  if(xmlDoc){
    const headerDom = xmlDoc.getElementsByTagName('vitalheader')[0];
    const footerDom = xmlDoc.getElementsByTagName('vitalfooter')[0];
    if(headerDom && headerHtml){
      headerDom.innerHTML = headerHtml;
    }
    if(footerDom && footerHtml){
      footerDom.innerHTML = footerHtml;
    }
  }
  
  return { xmlDoc, xmlString };
}

/**
 * 获取模板属性
 * @param htmlStr
 * @param element
 * @param attr
 * @returns {*}
 */
function getAttribute(htmlStr, element, attr){
  htmlStr = htmlStr.replace(/\n/g, '');
  var regOne = new RegExp("<" + element + "[^<>]*?\\s" + attr + "=\"(.*?)\"");
  var regTwo = new RegExp(attr + "=\"(.*?)\""); // /\"(.*?)\"/g;
  
  var innerHtml;
  //console.log('getAttribute-regOne',{htmlStr, regOne, attr});
  htmlStr = htmlStr.replace(regOne, (param) => {
   // console.log({ param })
    param = param.replace(regTwo, (param1)=>{
      //console.log({ param1 })
      innerHtml = param1.replace(`${attr}=`, '');
      innerHtml = innerHtml.replace(/\"+$/, '');
      innerHtml = innerHtml.replace(/^\"+/, '');
      return ''
    });
    return param
  });
  return {
    htmlStr,
    innerHtml
  }
}
